<?
// Инициализация теста

function atest_mod_addressbook($level)
{   // Возврощает списко тестовых функций
    switch ($level)
    {
        case 'unit':
            // Функции модульного тестирования
            // (изолированный функционал)
            return array();
        break;
        case 'func':
            // Функции функционального тестирования
            // Приемочнгое тестирование
            return array(
                            'atest_mod_addressbook_func_classes');
        break;

    }
}




function atest_mod_addressbook_func_classes()
{   // Тестируем работу стандартных вызовов

    $ok = true;
	$pretime = $start = microtime(true);
    echo '<pre>';
    $Processor = mst_getdatemod('addressbook','Processor');
    // Получаем шаблон объекта-персоны
    $obj = $Processor->query('sc_getObj_fpersones');
    // Добавляем информацию о пользователе
    // Добавляем информацию о классе
    $obj->addItem('cls/users','data');
    $obj->addItem('cls/users/user_id','int');
    $obj->setP(114,'cls/users/user_id');
    $obj->setP('Тест','first');
    $obj->setP('Тестович','middle');
    $obj->setP('Тестинский','last');
    $obj->setP('фон','suffix');
    $obj->setP('Mr.','formaddr');
    $obj->setP('aafmsl','format');
    // print_r($obj);
    
    // Сохраняем в базу данных
    $id = $Processor->query('savePerson',$obj);
    $obj2 = $Processor->query('getPerson',$id);
    if (
            $obj->getP('first')!==$obj2->getP('first')
            OR $obj->getP('middle')!==$obj2->getP('middle')
            OR $obj->getP('last')!==$obj2->getP('last')
            OR $obj->getP('suffix')!==$obj2->getP('suffix')
            OR $obj->getP('formaddr')!==$obj2->getP('formaddr')
            OR $obj->getP('format')!==$obj2->getP('format')
            OR $obj->getP('cls/users/user_id')!==$obj2->getP('cls/users/user_id')
        )
    {
        echo "\nВозвращена неправильная информация о персоне";
        print_r($obj);
        print_r($obj2);
        $ok = false;
    }
	// Проверяем правильность форматирования имени
    $name = $Processor->query('getPersonName',$obj);
    if ($name->getP() !== 'Mr. Mr. Тест Тестович фон Тестинский')
    {
        echo "\nИмя возвращено в неправильном формате: {$name->getP()}";
        $ok = false;
    }
	
	// Проверяем правильность определения принадлежности к классу
	if (
		($var1 = $Processor->query('isPerson2Addf',array('code'=>'users','o_id'=>$obj2->getId()))) !==true
	)
	{
	    
		echo "\nОшибка: неправильно определена принадлежность персоны к классу users\n";
		var_dump($var1);
        $ok = false;

	}
	if (
		($var1 = $Processor->query('isPerson2Addf',array('code'=>'userx','o_id'=>$obj2->getId()))) !==false
	)
	{
	    
		echo "\nОшибка: неправильно определена принадлежность персоны к классу usersx\n";
		var_dump($var1);
        $ok = false;

	}
	
    // Удаляем персону

    $Processor->query('deletePerson',$id);

    //Код Квашнина Павла
	   //создаем группу
	echo ('<br>***************<br>'); 
    $obj = $Processor->query('sc_getObj_pgroups');
    $obj->setP('445','name');
    $obj->setP('43315','child_cache');
	$obj->setP('33261','parent');
	$id=$Processor->query('savePGroup',$obj);
	if (!($id))
	{
		echo ('Ошибка. Сохранение вернуло False</br>');
	}else
	{
		//проверяем данные заисанные в базу
		$saveobj = $Processor->query('sc_get_pgroups',$id);
		if (
            $obj->getP('name')!==$saveobj->getP('name')
            OR $obj->getP('child_cache')!==$saveobj->getP('child_cache')
            OR $obj->getP('parent')!==$saveobj->getP('parent')
            )
    	{
	        echo "Возвращена неправильная информация о группе после сохранения </br>";	
	        print_r($obj);
	        echo('</br>************* From Base *************</br>');
   	    	print_r($saveobj);
    	}
    	//обновляем данные о пользователе
    	$save = $Processor->query('sc_get_pgroups',$saveobj->getId());
    	$save->setP('999','parent');
    	$res_id=$Processor->query('savePGroup',$save);
 		$res=$Processor->query('sc_get_pgroups',$save);
		if (
            $obj->getP('name')!==$saveobj->getP('name')
            OR $obj->getP('child_cache')!==$saveobj->getP('child_cache')
            OR $obj->getP('parent')!==$saveobj->getP('parent')
            )
        {
            echo (' Возвращена неправильная информация о группе после обновления');	
        }
	}
	
		
	//вводим пользователя  в группу 
	$obj1 = $Processor->query('sc_getObj_groupmembers');
    $obj1->setP(1,'p_id');
    $obj1->setP(1,'g_id');

    if (!$Processor->query('includePGroupMember',$obj1))
	{
 		echo ('В группу персону не добавили!');
	}
	

	//проверка принадлежности пользователя к группе
	
	if(!$Processor->query('isPGroupMemberStrong',$obj1))
	{
		echo ('Ошибка');
	}
		
	//исключаем пользователя  из группы 
   	
	if (!$Processor->query('excludePGroupMember',$obj1)) 
	{
		echo('Из группы персону не удалили');
	}
	
	//лист пользователей одной группы
	$q=($Processor->query('listPGroupMemberStrong',1));
	if  (!$q)
	{
		echo('Лист не сделали');
	}
	/*foreach ($q as $member)
	{
		print_r ($member->getId());
		echo ('<br>*************************************<br>');
	}
    */
	



	

	
	
	echo ('<br>***************<br>'); 
    
    
    //Конец Кода Квашнина Павла

    echo "\n".round(-$pretime+($pretime = microtime(true)),6);
	    
    echo '</pre>';
    return $ok;
}
?>